package com.hsh.tools;

import org.apache.shiro.crypto.hash.SimpleHash;
import org.springframework.util.DigestUtils;


public class Md5Utils {
    /**
     * md5加密
     */
    public static String md5Hex(String value) {
        return DigestUtils.md5DigestAsHex(value.getBytes());
    }

    /**
     * 3次md5加密
     */
    public static String md5Hex3(String value) {
        for (int i = 0; i < 3; i++) {
            value = DigestUtils.md5DigestAsHex(value.getBytes());
        }
        return value;
    }

    /**
     * 原密码加密三次，然后使用盐加密一次
     */
    public static String md5Hex3(String value, String slat) {
        for (int i = 0; i < 3; i++) {
            value = DigestUtils.md5DigestAsHex(value.getBytes());
        }
        value = DigestUtils.md5DigestAsHex((value + slat).getBytes());
        return value;
    }


    /**
     * 密码加密(shiro)
     *
     * @param password 密码(前台参入过来的密码)
     * @param salt     盐 数据库中的盐
     * @return
     */
    public static String md5Encryption(String password, String salt) {
        String algorithmName = FinalData.HASH_ALGORITHM_NAME_MD5;//加密算法 md5
        int hashIterations = FinalData.HASH_ITERATIONS;//加密次数 1024
        Object obj = new SimpleHash(algorithmName, password, salt, hashIterations);
//        String obj = Md5Crypt.apr1Crypt(password.getBytes(), salt);

        return obj + "";
    }

    public static void main(String[] args) {
        // 前台  原密码  盐：原密码长度    密码加密规则   原密码md5 加密三次 然后原密码长度作为盐 md5加密一次
        // 密码 123666
        // 前台传入值
        String oldPwd = "123666";
        String newPwd = md5Hex3(oldPwd, oldPwd.length() + "");
        System.out.println("前台传入值：" + newPwd);

        // 后端加密规则，通过前台传入 加密1024次
        String dbSlat = "hsh";
        System.out.println(md5Encryption(newPwd, dbSlat));
    }
}
